package hz.mobileproject.pda.push;

/**
 * Created by Administrator on 2017/7/9 0009.
 */

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;
import android.util.Log;
import android.view.WindowManager;

import java.util.Observer;

/**
 * 登陆进度提示和超时检测封装实现类.
 */
public class OnLoginProgress
{
    /** 登陆的超时时间定义 */
    private final static int RETRY_DELAY = 6000;

    private Handler handler = null;
    private Runnable runnable = null;
    // 重试时要通知的观察者
    private Observer retryObsrver = null;

    private ProgressDialog progressDialogForPairing = null;
    private Activity parentActivity = null;

    public OnLoginProgress(Activity parentActivity)
    {
        this.parentActivity = parentActivity;
        init();
    }

    private void init()
    {
        progressDialogForPairing = new ProgressDialog(parentActivity);
        progressDialogForPairing.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialogForPairing.setTitle("登陆中");
        progressDialogForPairing.setMessage("正在登陆中，请稍候。。。");
        progressDialogForPairing.setCanceledOnTouchOutside(false);

        handler = new Handler();
        runnable = new Runnable(){
            @Override
            public void run()
            {
                onTimeout(parentActivity);
            }
        };
    }

    /**
     * 登陆超时后要调用的方法。
     */
    private void onTimeout(Context mcontext)
    {
        // 本观察者中由用户选择是否重试登陆或者取消登陆重试
        new AlertDialog.Builder(mcontext)
                .setTitle("超时了")
                .setMessage("登陆超时，可能是网络故障或服务器无法连接，是否重试？")
                .setPositiveButton("重试！", new DialogInterface.OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog,int which)
                    {
                        // 确认要重试时（再次尝试登陆哦）
//                        doLogin();
                    }
                })
                .setNegativeButton("取消" , new DialogInterface.OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog,int which)
                    {
                        // 不需要重试则要停止“登陆中”的进度提示哦
                        OnLoginProgress.this.showProgressing(false);
                    }
                })
                .show();
    }

    /**
     * 显示进度提示.
     *
     * @param show
     */
    public void showProgressing(boolean show)
    {
        // 显示进度提示的同时即启动超时提醒线程
        if(show)
        {
            showLoginProgressGUI(true);

            // 先无论如何保证利重试检测线程在启动前肯定是处于停止状态
            handler.removeCallbacks(runnable);
            // 启动
            handler.postDelayed(runnable, RETRY_DELAY);
        }
        // 关闭进度提示
        else
        {
            // 无条件停掉延迟重试任务
            handler.removeCallbacks(runnable);

            showLoginProgressGUI(false);
        }
    }

    /**
     * 进度提示时要显示或取消显示的GUI内容。
     *
     * @param show true表示显示gui内容，否则表示结速gui内容显示
     */
    private void showLoginProgressGUI(boolean show)
    {
        // 显示登陆提示信息
        if(show)
        {
            try{
                if(parentActivity != null && !parentActivity.isFinishing())
                    progressDialogForPairing.show();
            }
            catch (WindowManager.BadTokenException e){
            }
        }
        // 关闭登陆提示信息
        else
        {
            // 此if语句是为了保证延迟线程里不会因Activity已被关闭而此处却要非法地执行show的情况（此判断可趁为安全的show方法哦！）
            if(parentActivity != null && !parentActivity.isFinishing())
                progressDialogForPairing.dismiss();
        }
    }
}
